package com.itheima.d1_commun;

/**
 * 打电话线程类
 */
public class CallThread extends Thread {
    private Phone phone;

    public CallThread(Phone phone) {
        this.phone = phone;
    }

    @Override
    public void run() {
        //1.完成打电话，不断打电话
        while (true) {
            synchronized (phone) {
                //2.判断电话的状态，如果tag的值是false时，就可以打出电话
                if (!phone.tag) {
                    try {
                        System.out.println("打出电话...");
                        Thread.sleep(500);
                        //3.电话已经打出，tag应该变成true
                        phone.tag = true;

                        //4.电话打出去，接听电话的线程应该去接听，可能接听电话的线程此时在等待
                        //尝试唤醒现在正在等待的线程，用notifyAll方法
                        phone.notifyAll();

                        //5.现在所有线程都被唤醒了，都去抢夺cpu的执行权力，打电话的线程没有必要抢。打电话线程应该等待！
                        phone.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}
